home *** CD-ROM | disk | FTP | other *** search
- /*
- Internals
- */
-
- #define ADD(x,n) (((long)(x))+(n))
- #define GET(x) (*((long *)(x)))
- #define IND(x,n) (*((long *)ADD(x,n)))
- #define CLEAN(x) (((long)(x))&0xFFFFFFF8)
-
- /*
- Externals
- */
-
- #define VECTOR(x) ((long *)ADD(x,7))
- #define CHARACTER(x) ((char)(((long)(x))>>16))
- #define STRUCTURE(x,s) ((struct s *)ADD(x,11))
- #define FLOAT(x) ((short double *)CLEAN(x))
- #define STRING(x) ((char *)ADD(x,7))
-
- #define VECTOR_SIZE(x) (IND(x,4)&0x00FFFFFF)
- #define STRING_SIZE(x) VECTOR_SIZE(x)
-
- #define CAR(x) IND(x,-4)
- #define CDR(x) GET(x)
-
- #define BOX(x) (((long)(x))<<3)
- #define UNBOX(x) (((long)(x))>>3)
-
- /*
- Utilities
- */
-
- #define RETURN_A0(expr) { \
- void *_tmp_a0; \
- _tmp_a0 = (void *) (expr); \
- asm { MOVE.L _tmp_a0,a0 }; \
- return; \
- }
-